// ==========================================================================
// GFast自动生成dao internal操作代码。
// 生成日期：2023-11-08 10:11:31
// 生成路径: internal/app/plugin/mail/dao/internal/plugin_mail.go
// 生成人：gfast
// desc:邮件发送
// company:云南奇讯科技有限公司
// ==========================================================================

package internal

import (
	"context"

	"github.com/gogf/gf/v2/database/gdb"
	"github.com/gogf/gf/v2/frame/g"
)

// PluginMailDao is the manager for logic model data accessing and custom defined data operations functions management.
type PluginMailDao struct {
	table   string            // Table is the underlying table name of the DAO.
	group   string            // Group is the database configuration group name of current DAO.
	columns PluginMailColumns // Columns is the short type for Columns, which contains all the column names of Table for convenient usage.
}

// PluginMailColumns defines and stores column names for table plugin_mail.
type PluginMailColumns struct {
	Id     string //
	MType  string // 邮箱类型
	User   string // 用户名称
	Pass   string // 密码
	Host   string // 主机地址
	Port   string // 端口
	Status string // 状态 : 0 - 禁用 1 - 启用
	Remark string //         <el-form-item label="备注" prop="remark">
}

var mailColumns = PluginMailColumns{
	Id:     "id",
	MType:  "m_type",
	User:   "user",
	Pass:   "pass",
	Host:   "host",
	Port:   "port",
	Status: "status",
	Remark: "remark",
}

// NewPluginMailDao creates and returns a new DAO object for table data access.
func NewPluginMailDao() *PluginMailDao {
	return &PluginMailDao{
		group:   "default",
		table:   "plugin_mail",
		columns: mailColumns,
	}
}

// DB retrieves and returns the underlying raw database management object of current DAO.
func (dao *PluginMailDao) DB() gdb.DB {
	return g.DB(dao.group)
}

// Table returns the table name of current dao.
func (dao *PluginMailDao) Table() string {
	return dao.table
}

// Columns returns all column names of current dao.
func (dao *PluginMailDao) Columns() PluginMailColumns {
	return dao.columns
}

// Group returns the configuration group name of database of current dao.
func (dao *PluginMailDao) Group() string {
	return dao.group
}

// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation.
func (dao *PluginMailDao) Ctx(ctx context.Context) *gdb.Model {
	return dao.DB().Model(dao.table).Safe().Ctx(ctx)
}

// Transaction wraps the transaction logic using function f.
// It rollbacks the transaction and returns the error from function f if it returns non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note that, you should not Commit or Rollback the transaction in function f
// as it is automatically handled by this function.
func (dao *PluginMailDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
	return dao.Ctx(ctx).Transaction(ctx, f)
}
